package com.zxj.friend.service.user;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zxj.common.core.domain.R;
import com.zxj.common.core.domain.vo.PageVO;
import com.zxj.friend.domain.user.dto.UserCodeDTO;
import com.zxj.friend.domain.user.dto.UserLoginDTO;
import com.zxj.friend.domain.user.dto.UserUpdateDTO;
import com.zxj.friend.domain.user.entity.User;
import com.zxj.friend.domain.user.vo.LoginUserVO;
import com.zxj.friend.domain.user.vo.UserLoginVO;
import com.zxj.friend.domain.user.vo.UserVO;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author zxj2022
 * @since 2025-01-01
 */
public interface IUserService extends IService<User> {

    /**
     * 发送验证码
     *
     * @param userCodeDTO 用户请求发生验证码参数
     * @return 结果
     */
    boolean sendCode(UserCodeDTO userCodeDTO);

    /**
     * 验证码登录或注册
     * @param userLoginDTO 用户登录参数
     * @return
     */
    UserLoginVO codeLogin(UserLoginDTO userLoginDTO);

    /**
     * 退出登录
     * @param token token
     * @return 成功与否结果
     */
    boolean logout(String token);

    /**
     * 从 token 中获取用户信息
     *
     * @param token token
     * @return 用户信息
     */
    LoginUserVO info(String token);

    /**
     * 获取用户详情
     * @return 用户详情
     */
    UserVO detail();

    /**
     * 编辑用户信息
     * @param userUpdateDTO 用户更新信息
     * @return 结果
     */
    boolean edit(UserUpdateDTO userUpdateDTO);

    /**
     * 更新用户头像
     * @param headImage 头像地址
     * @return 结果
     */
    boolean updateHeadImage(String headImage);
}
